# -*- coding: utf-8 -*-
"""
@Time    : 2024/8/20 11:11 
@Author  : ZhangShenao 
@File    : 5.类属性与类方法.py
@Desc    : 类对象与类属性
"""


class Car(object):
    # 类属性
    total_cars: int = 0

    # 构造方法
    def __init__(self, brand: str, model: str):
        self.brand = brand
        self.model = model

        # 修改类属性
        # 通过__class__魔法属性,可以获取一个实例所属的类对象
        self.__class__.total_cars += 1

    # 实例方法
    def show_info(self):
        print(f'This is a {self.brand} {self.model}.')

    # 类方法,通过@classmethod装饰器装饰
    @classmethod
    def show_total_cars(cls):  # 类方法的第一个形参默认为cls,代表当前类对象
        # 通过__name__魔法属性,可以获取当前类名
        print(f"当前类: {cls.__name__}")
        print(f"total_cars = {cls.total_cars}")


if __name__ == '__main__':
    su7 = Car('小米', 'Su7')
    su7.show_info()

    model_x = Car('特斯拉', 'Model X')
    model_x.show_info()

    # 调用类对象,直接调用类方法
    Car.show_total_cars()

    # 通过实例对象,也可以调用类方法,但是不推荐这样使用
    # su7.show_total_cars()
